package classesBD; 

import aplicacao.funcoes;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Pessoal
 */
public class Documento implements tabela{
  protected String ee;
  protected String paginas;
  protected String url;
  protected String volume;
  protected String titulo;
  protected int ano;
  protected int mes;
  protected String anotacao;
  protected String publisher;
  protected int idDocumento;
  protected int id;
  protected ArrayList<Relacionamento> rels;

  public Documento() {
    rels = new ArrayList();
  }

  public int getIdDocumento() {
    return idDocumento;
  }
  
 
  @Override
  public int insere(boolean checaExistencia){
    if (checaExistencia){
      idDocumento = existe(titulo);
    }  
    if (idDocumento == 0){ 
        try {
            String[] campos = new String[10];
            campos[0] = "default";
            campos[1] = ee;
            campos[2] = paginas;
            campos[3] = url;
            campos[4] = titulo;
            campos[5] = Integer.toString(ano);
            campos[6] = Integer.toString(mes);
            campos[7] = anotacao;
            campos[8] = publisher;
            campos[9] = Integer.toString(id);
            String query = funcoes.montaInsert("DOCUMENTO", campos);
            idDocumento = Conexao.executa(query, true);
            Conexao.fecha();
            for(int i=0;i<rels.size();i++){
              rels.get(i).insere(true);
            }
        } catch (SQLException ex) {
            Logger.getLogger(Documento.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    return idDocumento;
  }

  @Override
  public void buscaPorId(int id) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public void buscaPorNome(String nome) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public boolean preencheAttr(String attr, String valor) {
    String atributo = attr.toLowerCase();
    boolean result = true;
    switch(atributo){
      case "ee":ee = valor;
        break;
      case "pages": paginas = valor;
        break;
      case "url": url = valor;
        break;
      case "volume": volume = valor;
        break;
      case "title": titulo = valor;
        break;
      case "year": ano = Integer.parseInt(valor);
        break;
      case "month": mes = funcoes.getNumeroMes(valor);
        break;
      case "note": anotacao = valor;
        break;
      case "publisher": publisher = valor;
        break;
      case "id": id = Integer.parseInt(valor);
        break;
      case "editor":  
      case "author": result = preencheAttrRel(attr, valor);
        break; 
      default: result = false;
    }
    return result;
  }

  @Override
  public String existe(int id) {
    String query = "SELECT TITULO FROM DOCUMENTO WHERE IDDOCUMENTO=" + Integer.toString(id);
    String[][] retorno = Conexao.pesquisa(query, 1);
    if (retorno.length > 0){
      return retorno[0][0];
    }else{
      return "";
    }
  }

  @Override
  public int existe(String nome) {
    nome = nome.toLowerCase();
    String query = "SELECT IDDOCUMENTO FROM DOCUMENTO WHERE LOWER(TITULO)=" + funcoes.quotedStr(nome);
    String[][] retorno = Conexao.pesquisa(query, 1);
    if (retorno.length > 0){
      return Integer.parseInt(retorno[0][0]);
    }else{
      return 0;
    }
  }
  
  
  private boolean preencheAttrRel(String attr, String valor){
    rels.add(new Relacionamento(this));
    return rels.get(rels.size()-1).preencheAttr(attr, valor);
  }
}
